﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Data;
using System.Collections;
using AdminCondominio.Dominio;

namespace AdminCondominio.Persistencia
{
    public class MorososDAO
    {
        // Declaramos la cadena de conexión a la BD
        //private String _CadenaConexion = @"Data Source=localhost;Initial Catalog=BdCondominio;User Id=sa;Password=;";
        private String _CadenaConexion = @"Data Source=localhost;Initial Catalog=BdCondominio;Persist Security Info=True;User ID=sa;Password=";
        // Declaramos el objeto de tipo conexión
        private SqlConnection _Conexion;

        public MorososDAO()
        {
            // Instanciamos el objeto conexión
            _Conexion = new SqlConnection(_CadenaConexion);
        }



        public ICollection<Cuota> ListarMorosos()
        {
            try
            {
            // Abrir conexión a la BD
            _Conexion.Open();
            // Definir el comando (sentencia sql)
            String _Sentencia = @"SELECT cu.CoCuota "+
                                  ",vv.CoVivienda "+
                                  ",cu.TxPeriodo "+
                                  ",cu.Importe "+
                                  ",cu.FeVencimiento "+
                                  ",cu.Estado "+
                            ",vv.ubicacion "+
                            ",rs.NoResidente "+
                            ",rs.NuDocumento   "+                         
                            "  FROM cuota cu "+
                            "inner join tipo_pago tp on (cu.CoTipoPago=tp.CoTipoPago) "+
                            "inner join vivienda vv on (vv.CoVivienda=cu.CoVivienda) "+
                            "inner join residente rs on (vv.CoResidente=rs.CoResidente) "+
                            "where cu.estado='P' and CURRENT_TIMESTAMP >= cu.FeVencimiento ";
            SqlCommand _Comando = new SqlCommand(_Sentencia, _Conexion);
            // Agregar los parámetros al comando
            // Ejecutar el comando
            SqlDataReader resultado = _Comando.ExecuteReader(); // Ejecuta y no devuelve valor
            // Capturar el resultado
            
            //ICollection<Cuota> listaMorosos = resultado.HasRows;
            List<Cuota> listaMorosos = new List<Cuota>();
            Cuota cuota = null;           
            
            while (resultado.Read())
            {
                cuota = new Cuota();
                cuota.CoCuota = (int)resultado["CoCuota"];
                cuota.Vivienda = new Vivienda();
                cuota.Vivienda.CoVivienda = (int)resultado["CoVivienda"];
                cuota.Vivienda.Ubicacion = (String)resultado["ubicacion"];
                cuota.TxPeriodo = (String)resultado["TxPeriodo"];
                cuota.Importe = (decimal)resultado["Importe"];
                cuota.FeVencimiento = (DateTime)resultado["FeVencimiento"];
                cuota.Estado = (String)resultado["Estado"];
                cuota.Vivienda.Residente = new Residente();
                cuota.Vivienda.Residente.NoResidente = (String)resultado["NoResidente"];
                cuota.Vivienda.Residente.NuDocumento = (String)resultado["NuDocumento"];
                listaMorosos.Add(cuota);
            }

            Console.WriteLine("Cantidad de Morosos: "+listaMorosos.Count);
            // Cerrar la conexión
            _Conexion.Close();
            // Retornar el objeto
            return listaMorosos;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                throw new Exception(e.Message);
            }
        }

        
    }
}